package com.edicsem.pe.sie.service.facade.impl;


import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.edicsem.pe.sie.entity.DomicilioPersonaSie;
import com.edicsem.pe.sie.entity.EmpleadoSie;
import com.edicsem.pe.sie.entity.TelefonoPersonaSie;
import com.edicsem.pe.sie.model.dao.CargoEmpleadoDAO;
import com.edicsem.pe.sie.model.dao.DomicilioEmpleadoDAO;
import com.edicsem.pe.sie.model.dao.EmpleadoSieDAO;
import com.edicsem.pe.sie.model.dao.EmpresaDAO;
import com.edicsem.pe.sie.model.dao.EstadoGeneralDAO;
import com.edicsem.pe.sie.model.dao.TelefonoEmpleadoDAO;
import com.edicsem.pe.sie.model.dao.TipoCasaDAO;
import com.edicsem.pe.sie.model.dao.TipoDocumentoDAO;
import com.edicsem.pe.sie.model.dao.UbigeoDAO;
import com.edicsem.pe.sie.service.facade.EmpleadoSieService;

@Stateless
public class EmpleadoSieServiceImpl implements EmpleadoSieService{
	@EJB
	private EmpresaDAO objEmpresaDao;  
	@EJB
	private EmpleadoSieDAO objEmpleadoDao;  
	@EJB
	private TipoDocumentoDAO objTipoDocDao;
	@EJB
	private CargoEmpleadoDAO objCargoEmpDao;
	@EJB 
	private DomicilioEmpleadoDAO objDomicilioDao;
	@EJB 
	private TelefonoEmpleadoDAO objTelefonoDao;
	
	@EJB
	private EstadoGeneralDAO objEstadoDao;
	
	@EJB
	private UbigeoDAO objUbigeoDao;
	@EJB
	private TipoCasaDAO objTipoCasaDao;
	
	public static Log log = LogFactory.getLog(EmpleadoSieServiceImpl.class);

	
	public void insertarEmpleado(EmpleadoSie objEmpleado,DomicilioPersonaSie objDomicilio, int codigoTipoDocumento,	int codigoCargoEmpleado, String idUbigeo, int tipo, int idCargo,
			int DomicilioPersona, int TelefonoPersona, int TipoDocumento,int CargoEmpleado,int idEmpresa, int idTipoPago, int codigoEmpleado, List<TelefonoPersonaSie> TelefonoPersonaList) {
		// TODO Auto-generated method stub
		/**Inserta el empleado**/
		objEmpleado.setTbTipoDocumentoIdentidad(objTipoDocDao.buscarTipoDocumento(TipoDocumento));
		objEmpleado.setTbCargoEmpleadoSie(objCargoEmpDao.findCargoEmpleado(CargoEmpleado));
		/**Estado del empleado: habilitado(3)**/
		objEmpleado.setTbEstadoGeneral(objEstadoDao.findEstadoGeneral(3));
		objEmpleadoDao.insertarEmpleado(objEmpleado);
		
		/**Inserta telefono(s)**/
		for (TelefonoPersonaSie objTelefono : TelefonoPersonaList) {
			objTelefono.setIdempleado(objEmpleado);
			objTelefono.setTbEstadoGeneral(objEstadoDao.findEstadoGeneral(17));
			objTelefonoDao.insertarTelefonoEmpleado(objTelefono);
		}
	    /**Inserta el domicilio**/
		objDomicilio.setIdempleado(objEmpleadoDao.buscarEmpleado(objEmpleado.getIdempleado()));
		objDomicilio.setTbUbigeo(objUbigeoDao.findUbigeo(Integer.parseInt(idUbigeo)));
		objDomicilio.setTbTipoCasa(objTipoCasaDao.findTipoCasa(tipo));
		/**Estado del domicilio: habilitado(15)**/
		objDomicilio.setTbEstadoGeneral(objEstadoDao.findEstadoGeneral(15));
		objDomicilioDao.insertarDomicilioEmpleado(objDomicilio);
	}

	
	public void actualizarEmpleado(EmpleadoSie objEmpleado,	DomicilioPersonaSie objDomicilio, int codigoTipoDocumento,
			int codigoCargoEmpleado, String idUbigeo, int tipo, int idCargo,int DomicilioPersona, int TelefonoPersona, int TipoDocumento,int CargoEmpleado,
			int idEmpresa, int idTipoPago, int codigoEmpleado,List<TelefonoPersonaSie> TelefonoPersonaList,	List<TelefonoPersonaSie> TelefonoDeshabilitado) {
		// TODO Auto-generated method stub
		objEmpleado.setTbTipoDocumentoIdentidad(objTipoDocDao.buscarTipoDocumento(TipoDocumento));
		objEmpleado.setTbCargoEmpleadoSie(objCargoEmpDao.findCargoEmpleado(CargoEmpleado));
		objEmpleadoDao.actualizarEmpleado(objEmpleado);
		
		/**Actualiza telefono(s)**/
		for (TelefonoPersonaSie objTelefono : TelefonoPersonaList) {
			log.info("bien!! por agregar ");
			if(objTelefono.getItem().equalsIgnoreCase("Por Agregar")){
			objTelefono.setIdempleado(objEmpleado);
			objTelefono.setTbEstadoGeneral(objEstadoDao.findEstadoGeneral(17));
			objTelefonoDao.insertarTelefonoEmpleado(objTelefono);
			}
		}
		for (TelefonoPersonaSie objTelefono :  TelefonoDeshabilitado) {
			log.info("deshabilitar ");
			objTelefono.setIdempleado(objEmpleado);
			objTelefono.setTbEstadoGeneral(objEstadoDao.findEstadoGeneral(18));
			objTelefonoDao.actualizarTelefonoEmpleado(objTelefono);
		}
		/**Actualiza el domicilio**/
			objDomicilio.setIddomiciliopersona(objDomicilio.getIddomiciliopersona());
			objDomicilio.setIdempleado(objEmpleadoDao.buscarEmpleado(objEmpleado.getIdempleado()));
			objDomicilio.setTbUbigeo(objUbigeoDao.findUbigeo(Integer.parseInt(idUbigeo)));
			objDomicilio.setTbTipoCasa(objTipoCasaDao.findTipoCasa(tipo));
			/*Estado del domicilio: habilitado(15)*/
			objDomicilio.setTbEstadoGeneral(objEstadoDao.findEstadoGeneral(15));
			objDomicilioDao.actualizarDomicilioEmpleado(objDomicilio);
	}

	
	public void eliminarEmpleado(int id) {
		EmpleadoSie empleado = objEmpleadoDao.buscarEmpleado(id);
		empleado.setTbEstadoGeneral(objEstadoDao.findEstadoGeneral(4));
		objEmpleadoDao.actualizarEmpleado(empleado);
	}

	
	public EmpleadoSie buscarEmpleado(int id) {
		return objEmpleadoDao.buscarEmpleado(id);
	}

	
	public List listarEmpleados() {
		return objEmpleadoDao.listarEmpleados();
	}

	
	public List listarEmpleadosXCargo(int cargo) {
		log.info("LISTARA LOS CARGOS QUE TIENE UN EMPLEADO___DENTRO DEL SERVICEIMPL");
		return objEmpleadoDao.listarEmpleadosXCargo(cargo);
	}

	
	public List listarEmpleadoxEmpresas(int parametroObtenido) {
		return objEmpleadoDao.listarEmpleadoxEmpresas(parametroObtenido);
		}

	
	public List listarDni() {
		return objEmpleadoDao.listarDni();
	}

	
	public List listarUsuario() {
		return objEmpleadoDao.listarUsuario();
	}

	
	public EmpleadoSie buscarEmpleadoPorNombreCompleto(String nombreCompleto) {
		return objEmpleadoDao.buscarEmpleadoPorNombreCompleto(nombreCompleto);
	}
	
	
	public EmpleadoSie buscarEmpleadosPorUsuario(String usuario) {
		return objEmpleadoDao.buscarEmpleadosPorUsuario(usuario);
		}

}
